home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 8
/
Aminet 8 (1995)(GTI - Schatztruhe)[!][Oct 1995].iso
/
Aminet
/
mus
/
play
/
tracker_4_31.lzh
/
tracker
/
Amiga
/
requester.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-02-14
|
3KB
|
132 lines
/* requester.c
vi:ts=3 sw=3:
*/
/* $Id: requester.c,v 1.7 1995/02/14 16:51:22 espie Exp espie $
* $Log: requester.c,v $
* Revision 1.7 1995/02/14 16:51:22 espie
* *** empty log message ***
*
* Revision 1.6 1995/01/13 13:31:35 espie
* *** empty log message ***
*
* Revision 1.3 1994/01/09 04:49:18 Espie
* File requester !
*/
#include <libraries/reqtools.h>
#include <proto/reqtools.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <dos/dos.h>
#include "defs.h"
#include "extern.h"
#include "amiga/amiga.h"
ID("$Id: requester.c,v 1.7 1995/02/14 16:51:22 espie Exp espie $")
LOCAL void init_requester(void);
LOCAL struct ReqToolsBase *ReqToolsBase = 0;
LOCAL void (*INIT)(void) = init_requester;
LOCAL struct rtFileRequester *req = 0;
LOCAL struct rtHandlerInfo *myhandler = 0;
LOCAL void close_requester()
{
if (myhandler)
rtReqHandler(myhandler, 0, RTRH_EndRequest, REQ_CANCEL, TAG_END);
if (req)
rtFreeRequest(req);
if (ReqToolsBase)
CloseLibrary(ReqToolsBase);
myhandler = 0;
req = 0;
ReqToolsBase = 0;
}
LOCAL void init_requester()
{
ReqToolsBase = OpenLibrary("reqtools.library", 38);
if (!ReqToolsBase)
{
requested_file(0);
return;
}
at_end(close_requester);
req = rtAllocRequestA(RT_FILEREQ, NULL);
}
LOCAL char fname[108];
void handle_requester(ULONG received)
{
struct amiganame *new;
int total;
struct rtFileList *flist, *sweep;
struct MinList temp;
int result;
if ( (result = rtReqHandler(myhandler, received, TAG_END)) == CALL_HANDLER)
return;
remove_req_handler();
myhandler = 0;
flist = (struct rtFileList *)result;
if (flist)
{
NewList(&temp); /* use temp as a `place holder' */
sweep = flist;
while(sweep)
{
total = strlen(req->Dir) + strlen(sweep->Name) + 2;
new = malloc(sizeof(struct amiganame) + total);
if (!new)
continue;
AddPart(strcpy(new->s, req->Dir), sweep->Name, total);
new->i = TRUE;
AddTail(&temp, new);
sweep = sweep->Next;
}
rtFreeFileList(flist);
if (temp.mlh_TailPred != &temp)
{
/* unscrew the first element of temp out and loop the elements */
new = temp.mlh_Head;
new->n.mln_Pred = temp.mlh_TailPred;
temp.mlh_TailPred->mln_Succ = new;
requested_file(new);
}
else
requested_file(0);
}
else
requested_file(0);
}
void launch_requester()
{
INIT_ONCE;
if (myhandler || !req)
return;
if (CALL_HANDLER != (int)rtFileRequest(req, fname, "Load song",
RTFI_Flags, FREQF_MULTISELECT,
RT_ReqHandler, &myhandler, TAG_END))
{
myhandler = 0;
return;
}
install_req_handler(myhandler->WaitMask, handle_requester);
if (myhandler->DoNotWait)
handle_requester(0);
}